import axios from 'axios';
import store from "@store/store";
import router from "@router/router";
import { Message } from 'element-ui';

// 设置默认的 Authorization 头部（如果有 token）
axios.defaults.headers.common['Authorization'] = store.state.token ? `Bearer ${store.state.token}` : '';

// 请求拦截器
axios.interceptors.request.use(config => {
    // 检查是否存在 token，如果存在则在每个请求头部添加 Authorization
    const token = store.state.token ? store.state.token.token || store.state.token : null;
    // 确保注册请求不会带上 Authorization 头
    if (config.url.includes('/api/user/register')) {
        delete config.headers.common['Authorization']; // 删除 Authorization 头
    } else if (token) {
        config.headers.common['Authorization'] = `Bearer ${token}`;
    }
    return config;
}, err => {
    Message.error({ message: '请求超时!' });
    return Promise.reject(err);
});


// 响应拦截器
axios.interceptors.response.use(response => {
    // 成功处理的响应
    // 判断是否有成功提示信息，且只对特定操作提示成功
    if (response.status === 200 ||( response.data.success && response.data.message)) {
        // 如果是导出操作，直接返回响应
        if (response.data instanceof ArrayBuffer) {
            return response;
        }
        // 如果是成功的操作，提示成功
        if (response.data.success) {
            Message.success({ message: response.data.message || '操作成功' });
        }
    }
    // 非成功状态，处理失败的情况
    else if (!response.data.success && response.data.status !== '1') {
        // 如果响应的数据是ArrayBuffer类型，且导出失败
        if (response.data instanceof ArrayBuffer) {
            if (response.data.byteLength !== 246) {
                return response;  // 如果导出成功，继续处理响应
            } else {
                Message.error({message: '导出失败!'});
                return Promise.reject('导出失败');  // 导出失败，触发错误
            }
        } else {
            // 处理非导出操作的失败情况
            Message.error({message: response.data.reason || '操作失败'});
            return Promise.reject(response.data.reason || '操作失败');
        }
    }
    // 处理未授权状态
    if (response.data.status === 403) {
        store.commit('delToken');
        router.push('/login').then(() => {});
        return Promise.reject('未授权的请求');
    }
    return response;  // 成功响应返回
}, err => {
    // 处理错误的响应
    if (err && err.response) {
        console.log('响应状态码：', err.response.status);
        console.log('错误消息：', err.message);
        switch (err.response.status) {
            case 400:
                err.message = '请求错误(400)';
                break;
            case 401:
                err.message = '未授权，请重新登录(401)';
                store.commit('delToken');
                break;
            case 403:
                err.message = '登录已过期，请重新登录(403)';
                store.commit('delToken');
                router.push('/login').then(() => {});
                break;
            case 404:
                err.message = '请求出错(404)';
                break;
            case 408:
                err.message = '请求超时(408)';
                break;
            case 500:
                err.message = '服务器错误(500)';
                break;
            case 501:
                err.message = '服务未实现(501)';
                break;
            case 502:
                err.message = '网络错误(502)';
                break;
            case 503:
                err.message = '服务不可用(503)';
                break;
            case 504:
                err.message = '网络超时(504)';
                break;
            case 505:
                err.message = 'HTTP版本不受支持(505)';
                break;
            default:
                err.message = `连接出错(${err.response.status})!`;
        }
    } else {
        err.message = '连接服务器失败!';
    }
    Message.error({ message: err.message || '发生未知错误' });
    return Promise.reject(err);  // 使用 reject 而不是 resolve
});

export default axios;
